<?php

/*------------------------------------------------
*
*   Explay Engine Content Management System.
*   Copyright © 2008 Golovdinov Alexander.
*
*-------------------------------------------------
*
*   Official site: wwww.alex-home.spb.ru/explay.html
*   Contact e-mail: golovdinov@gmail.com
*
*   GNU General Public License original source:
*   http://www.gnu.org/licenses/gpl-3.0.html
*
------------------------------------------------*/

if (!defined ('EXPLAY')) exit;

// Настройки обновления
$load_url = 'http://update.explay.su/loadupdate.php'; // Базовый адрес сервера обновлений
$file_tmp_name = 'update.zip'; // Имя временного файла на сервере в папке update

// Информайия о системе
$SYSTEM_INFO = array ();
$file = file ($_SERVER['DOCUMENT_ROOT'].'/engine/cmsinfo.txt');

foreach ($file as $string) {
	$string = explode ('=>', $string);
	$key = trim ($string[0]);

	$SYSTEM_INFO[$key] = trim ($string[1]);
}



past_path ( array (array ('', 'Обновление')) );






// Начинаем обновление

if (isset($_GET['start_update'])) {

	include $_SERVER['DOCUMENT_ROOT'].'/engine/update.class.php';
	
	try {
		$update = new systemUpdate ();
		$update->run ($_SERVER['DOCUMENT_ROOT'].'/update/'.$file_tmp_name);
		
		site_message ('Обновление завершено успешно!');
		
		unlink ($_SERVER['DOCUMENT_ROOT'].'/update/'.$file_tmp_name);
		unlink ($_SERVER['DOCUMENT_ROOT'].'/update/update_log.xml');
	}
	catch (Exception $e) {
		site_error ('Ошибки обновления: '.$e->getMessage());
		print_update_form ();
	}

}


// Загружаем zip-архив с обновлением

elseif (isset($_GET['load'])) {
	
	$file_uploaded = false;
	
	// Если юзер загружает файл самомтоятельно
	if ($_FILES['updatefile']['name'] != '') {
		if (eregi('[A-Za-z0-9]\.zip', $_FILES['updatefile']['name'])) {
			if (copy($_FILES['updatefile']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/update/update.zip")) {
				$file_uploaded = true;
			} else {
				$response = array ();
				$response['error'] = 'Ошибка при загрузке файла обновления!';
			}
		} else {
			$response = array ();
			$response['error'] = 'Вы пытаетесь загрузить не файл обновления!';
		}
	// в противном случае сначала проверяем доступность обновления
	}
	
	if ($_POST['select'] == 'from_pc' && $_FILES['updatefile']['name'] == '') {
		$response = array ();
		$response['error'] = 'Вы не загрузили файл обновления!';
	}
	
	if ($_POST['select'] == 'from_server') {
		include $_SERVER['DOCUMENT_ROOT'].'/engine/update.class.php';
		$update = new systemUpdate ();
		$response = $update->checkforupdate ();
	}
	
	if ($_POST['select'] == 'from_pc' && $_FILES['updatefile']['name'] == '') {
			$response = array ();
			$response['error'] = 'Вы не загрузили файл с обновлением!';
	}
	
	if ($response['error'] == '') {
			
		if ($file_uploaded == false) {
			$buffer = '';
			$url = $load_url.'?version='.urlencode($SYSTEM_INFO['version']).'&host='.urlencode($_SERVER['HTTP_HOST']);
			
			$fp=fopen($url, 'r');
			while(!feof ($fp)) {
				$buffer.=fgets($fp, 1024);
			}
			fclose($fp);
			
			$fp=fopen($_SERVER['DOCUMENT_ROOT'].'/update/'.$file_tmp_name, 'w+');
			fwrite($fp,$buffer);
			fclose($fp);
		}
		
		$text = 'Обновление загружено! <a href="admin.php?do=update&start_update">Установить</a>';
		past_table ('Обновление', $text);
		
	} else {
		site_error ('Ошибка: '.$response['error']);
		print_update_form ();
	}
}

// Проверяем на наличие обновлений

elseif (isset ($_GET['checkforupdate'])) {
	include $_SERVER['DOCUMENT_ROOT'].'/engine/update.class.php';
	
	$update = new systemUpdate ();
	$response = $update->checkforupdate ();
	
	if ($response['error'] == '') {
		$table = 'Доступная версия: '.$response['allowedversion'].'<br />Описание: '.$response['description'].'<p /><input type="submit" onclick="document.location.href=\'admin.php?do=update&load\'" value="Обновить сейчас" />';
		past_table ('Доступно обновление', $table);
	} else {
		site_error ('Сервер обновлений вернул ошибку: '.$response['error']);
		print_update_form ();
	}
}

// Ничего не делаем XD

else {
	print_update_form ();
}

function check_allowed () {}

function print_update_form () {
	$text = <<<HTML
<form action="admin.php?do=update&load" method="post" name="select_update_location" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="10">
	<tr>
		<td width="20"><input type="radio" name="select" value="from_server" id="from_server" checked="checked" /></td>
		<td><label for="from_server">Загрузить с сервера обновлений</label></td>
	</tr>
	<tr>
		<td valign="top"><input type="radio" name="select" value="from_pc" id="from_pc" /></td>
		<td>
			<label for="from_pc">Загрузить с компьютера:
			<input type="file" name="updatefile" /></label>
		</td>
	</tr>
	<tr>			
		<td></td>
		<td><input type="submit" name="load" value="Загрузить обновление" /></td>
	</tr>
</table>
</form>
HTML;
	
	past_table ('Обновление', $text);
}